package com.anolesoft.amljmes.fortysix.controller;

import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.anolesoft.amljmes.fortysix.dto.*;
import com.anolesoft.amljmes.fortysix.service.mapper.AddPtdMapper;
import com.anolesoft.common.core.domain.LoginUser;
import com.anolesoft.common.core.web.domain.AjaxResult;
import com.anolesoft.common.security.util.SecurityUtils;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@RestController
@CrossOrigin
@RequestMapping("ierpConnector")
public class IerpConnectorController {
    @Autowired
    AddPtdMapper addPtdMapper;

    // 应是erp路径
    private final String URL = "http://192.168.8.106:8080/services/erpWebService?wsdl";
//    private final String URL = "http://192.168.114.10:8080/services/erpWebService?wsdl";

    // 查询条件传过去 分页形式 信息传回来(查询配套计划)
    @PostMapping(value="/query",produces= MediaType.APPLICATION_JSON_VALUE)
    public AjaxResult PtjhSelectAll(@RequestBody MesBzzPtjhDto dto) {
        String ordernumber = dto.getOrdernumber();
        String partdispatchnumber = dto.getPartdispatchnumber();
        String model = dto.getModel();
        String drawingno = dto.getDrawingno();
        String customer = dto.getCustomer();
        String itemno = dto.getItemno();
        String bomclassification = dto.getBomclassification();
        String dispatchnoofgeneral = dto.getDispatchnoofgeneral() ;
        String producttype = dto.getProducttype();
        Integer pageNo = dto.getPageNo();
        Integer pageSize = dto.getPageSize();

        try{
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("ordernumber",ordernumber);
            jsonObject.put("partdispatchnumber",partdispatchnumber);
            jsonObject.put("model",model);
            jsonObject.put("drawingno",drawingno);
            jsonObject.put("customer",customer);
            jsonObject.put("itemno",itemno);
            jsonObject.put("bomclassification",bomclassification);
            jsonObject.put("dispatchnoofgeneral",dispatchnoofgeneral);
            jsonObject.put("producttype",producttype);
            jsonObject.put("pageNo",pageNo);
            jsonObject.put("pageSize",pageSize);

            JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();

            Client client = dcf.createClient(URL);
            Object[] objects = new Object[0];
            objects = client.invoke("getHello待确定",jsonObject.toString());
            Object arrStr = objects[0];
//            JSON字符串转换成实体类对象
            String jsonObjectStr = arrStr.toString();
            List<MesBzzPtjhDto> list = JSON.parseObject(jsonObjectStr, new TypeReference<ArrayList<MesBzzPtjhDto>>(){});

            AjaxResult success = AjaxResult.success();
            success.put("data", list);
            return success;
        }catch (Exception e){
            e.printStackTrace();
            AjaxResult success = AjaxResult.success();
            success.put("data", "失败");
            return success;
        }
    }

    // 点明细，把主键传过去 明细传回来（查询配套计划明细）
    @PostMapping(value="/querymxObj",produces= MediaType.APPLICATION_JSON_VALUE)
    public AjaxResult PtjhmxSelectAll(@RequestBody String objuid) {
        try{
            JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();

            Client client = dcf.createClient(URL);
            Object[] objects = new Object[0];
            objects = client.invoke("getHello待确定",objuid);
            Object arrStr = objects[0];
//            JSON字符串转换成实体类对象
            String jsonObjectStr = arrStr.toString();
            List<MesBzzPtjhmxDto> list = JSON.parseObject(jsonObjectStr, new TypeReference<ArrayList<MesBzzPtjhmxDto>>(){});

            AjaxResult success = AjaxResult.success();
            success.put("data", list);
            return success;
        }catch (Exception e){
            e.printStackTrace();
            AjaxResult success = AjaxResult.success();
            success.put("data", "失败");
            return success;
        }
    }

    // 勾选点生成配套单按钮，把主键传过去，数据传回来（往配套单里添加，往配套单明细里添加）
    @PostMapping(value="/queryScptd",produces= MediaType.APPLICATION_JSON_VALUE)
    public AjaxResult queryScptdAll(@RequestBody String objuid) {
        Client client = null;
        try{
            JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();

            client = dcf.createClient(URL);
            Object[] objects = new Object[0];
            objects = client.invoke("getHello待确定",objuid);
            Object arrStr = objects[0];
//            JSON字符串转换成实体类对象
            String jsonObjectStr = arrStr.toString();

            List<PtjhZongDto> list = JSON.parseObject(jsonObjectStr, new TypeReference<ArrayList<PtjhZongDto>>(){});
            LoginUser loginUser = SecurityUtils.getLoginUser();

            for(int i = 0;i<list.size();i++){
                PtjhZongDto ptjhZongDto = list.get(i);
                String objuidPtd = IdUtil.simpleUUID();

//                //添加数据
//                MesBzzPtjhDto mesBzzPtjhDto = new MesBzzPtjhDto();
//                mesBzzPtjhDto.setOrdernumber(ptjhZongDto.getOrdernumber());
//                mesBzzPtjhDto.setBatch(ptjhZongDto.getBatch());
//                mesBzzPtjhDto.setPartdispatchnumber(ptjhZongDto.getPartdispatchnumber());
//                mesBzzPtjhDto.setModel(ptjhZongDto.getModel());
//                mesBzzPtjhDto.setBomclassification(ptjhZongDto.getBomclassification());
//                mesBzzPtjhDto.setSorties(ptjhZongDto.getSorties());
//                mesBzzPtjhDto.setItemno(ptjhZongDto.getItemno());
//                mesBzzPtjhDto.setMaterialname(ptjhZongDto.getMaterialname());
//                mesBzzPtjhDto.setDrawingno(ptjhZongDto.getDrawingno());
//                mesBzzPtjhDto.setQuantity(ptjhZongDto.getQuantity());
//                mesBzzPtjhDto.setDemandtime(ptjhZongDto.getDemandtime());
//                mesBzzPtjhDto.setDispatchnoofgeneral(ptjhZongDto.getDispatchnoofgeneral());
//                mesBzzPtjhDto.setCustomer(ptjhZongDto.getCustomer());
//                mesBzzPtjhDto.setProducttype(ptjhZongDto.getProducttype());
//                mesBzzPtjhDto.setFactorycode(ptjhZongDto.getFactorycode());
//                mesBzzPtjhDto.setDeletetag(ptjhZongDto.getDeletetag());
//                mesBzzPtjhDto.setDeletetime(ptjhZongDto.getDeletetime());
//
//                //明细添加数据
//                MesBzzPtjhmxDto mesBzzPtjhmxDto = new MesBzzPtjhmxDto();
//                mesBzzPtjhmxDto.setModel(ptjhZongDto.getModel());
//                mesBzzPtjhmxDto.setBatch(ptjhZongDto.getBatch());
//                mesBzzPtjhmxDto.setSorties(ptjhZongDto.getSorties());
//                mesBzzPtjhmxDto.setItemno(ptjhZongDto.getItemno());
//                mesBzzPtjhmxDto.setDispatchnumber(ptjhZongDto.getDispatchnumber());
//                mesBzzPtjhmxDto.setPartcode(ptjhZongDto.getPartcode());
//                mesBzzPtjhmxDto.setDrawingno(ptjhZongDto.getDrawingno());
//                mesBzzPtjhmxDto.setDeliveryworkshop(ptjhZongDto.getDeliveryworkshop());
//                mesBzzPtjhmxDto.setReceivingworkshop(ptjhZongDto.getReceivingworkshop());
//                mesBzzPtjhmxDto.setDeliverysequence(ptjhZongDto.getDeliverysequence());
//                mesBzzPtjhmxDto.setDrawingnoofstation(ptjhZongDto.getDrawingnoofstation());
//                mesBzzPtjhmxDto.setStationname(ptjhZongDto.getStationname());
//                mesBzzPtjhmxDto.setMaterialtype(ptjhZongDto.getMaterialtype());
//                mesBzzPtjhmxDto.setDemandquantity(ptjhZongDto.getDemandquantity());
//                mesBzzPtjhmxDto.setDemandtime(ptjhZongDto.getDemandtime());
//                mesBzzPtjhmxDto.setManufacturingunit(ptjhZongDto.getManufacturingunit());
//                mesBzzPtjhmxDto.setUserunit(ptjhZongDto.getUserunit());
//                mesBzzPtjhmxDto.setProductsource (ptjhZongDto.getProductsource());
//                mesBzzPtjhmxDto.setDeletetag(ptjhZongDto.getDeletetag());
//                mesBzzPtjhmxDto.setDeletetime(ptjhZongDto.getDeletetime());


                //添加数据
                MesBzzPtdDto mesBzzPtdDto = new MesBzzPtdDto();
                mesBzzPtdDto.setObjuid(objuidPtd);
                mesBzzPtdDto.setOrderNumber(ptjhZongDto.getOrdernumber());
                mesBzzPtdDto.setBatch(ptjhZongDto.getBatch());
                mesBzzPtdDto.setPartDispatchNumber(ptjhZongDto.getPartdispatchnumber());
                mesBzzPtdDto.setModel(ptjhZongDto.getModel());
                mesBzzPtdDto.setBomClassification(ptjhZongDto.getBomclassification());
                mesBzzPtdDto.setSorties(ptjhZongDto.getSorties());
                mesBzzPtdDto.setItemNo(ptjhZongDto.getItemno());
                mesBzzPtdDto.setMaterialName(ptjhZongDto.getMaterialname());
                mesBzzPtdDto.setDrawingNo(ptjhZongDto.getDrawingno());
                mesBzzPtdDto.setQuantity(ptjhZongDto.getQuantity());
                mesBzzPtdDto.setDemandTime(ptjhZongDto.getDemandtime());
                mesBzzPtdDto.setDispatch(ptjhZongDto.getDispatchnoofgeneral());
                mesBzzPtdDto.setCustomer(ptjhZongDto.getCustomer());
                mesBzzPtdDto.setProductType(ptjhZongDto.getProducttype());
                mesBzzPtdDto.setFactoryCode(ptjhZongDto.getFactorycode());
                mesBzzPtdDto.setDeleteTag(ptjhZongDto.getDeletetag());
                mesBzzPtdDto.setDeleteTime(ptjhZongDto.getDeletetime());
                mesBzzPtdDto.setSupportingPlanPk(ptjhZongDto.getObjuid());
                mesBzzPtdDto.setFounder(loginUser.getEmpUid());

                //明细添加数据
                MesBzzPtdmxDto mesBzzPtdmxDto = new MesBzzPtdmxDto();
                mesBzzPtdmxDto.setItemNo(ptjhZongDto.getItemno());
                mesBzzPtdmxDto.setPartCode(ptjhZongDto.getPartcode());
                mesBzzPtdmxDto.setPartDrawingNo(ptjhZongDto.getDrawingno());
                mesBzzPtdmxDto.setDrawingNoOfStation(ptjhZongDto.getDrawingnoofstation());
                mesBzzPtdmxDto.setStationName(ptjhZongDto.getStationname());
                mesBzzPtdmxDto.setMaterialType(ptjhZongDto.getMaterialtype());
                mesBzzPtdmxDto.setManufacturingUnit(ptjhZongDto.getManufacturingunit());
                mesBzzPtdmxDto.setUserUnit(ptjhZongDto.getUserunit());
                mesBzzPtdmxDto.setProductSource (ptjhZongDto.getProductsource());
                mesBzzPtdmxDto.setDemandTime(ptjhZongDto.getDemandtime());
                mesBzzPtdmxDto.setDemandQuantity(ptjhZongDto.getDemandquantity());
                mesBzzPtdmxDto.setQuantityOfMissingParts(ptjhZongDto.getDemandquantity());
                mesBzzPtdmxDto.setDetailsPk(ptjhZongDto.getObjuidmx());
                mesBzzPtdmxDto.setMatchingDocPk(objuidPtd);
                mesBzzPtdmxDto.setFactoryCode(ptjhZongDto.getFactorycode());
                mesBzzPtdmxDto.setPaigonghao(ptjhZongDto.getDispatchnumber());
                mesBzzPtdmxDto.setJixing(ptjhZongDto.getModel());
                mesBzzPtdmxDto.setJiaofuchejian(ptjhZongDto.getDeliveryworkshop());
                mesBzzPtdmxDto.setJieshouchejian(ptjhZongDto.getReceivingworkshop());
                mesBzzPtdmxDto.setJiaofushunxu(ptjhZongDto.getDeliverysequence());



                // 调sql
                addPtdMapper.addPtd(mesBzzPtdDto);
                addPtdMapper.addPtdmx(mesBzzPtdmxDto);
//                addPtdMapper.addPtjh(mesBzzPtjhDto);
//                addPtdMapper.addPtjhmx(mesBzzPtjhmxDto);
            }
            client.invoke("getHello待确定","生成成功");
            AjaxResult success = AjaxResult.success();
            success.put("data", "成功");
            return success;
        }catch (Exception e){
            e.printStackTrace();
            try{
                client.invoke("getHello待确定","生成失败");
            }catch (Exception e1){
                e1.printStackTrace();
            }
            AjaxResult success = AjaxResult.success();
            success.put("data", "失败");
            return success;
        }
    }
}
